<?php
/**
 * 以新浪微博的字数统计方式统计字数（简单版）
 * 中文算2个，英文算1个，全角字符算2个，半角字符算1个。
 * @link http://jsliuliang.blog.163.com/blog/static/12333516320097143434850/
 * @version $Id: strlen_weibo.php 190 2011-08-19 12:09:00Z horseluke@126.com $
 * @param string $string
 * @return integer
 */
function strlen_weibo($string){
	
	/*
	 * 新统计方法：
	 * 《php strlen mb_strlen计算中英文混排字符串长度》
	 * 在strlen计算时，对待一个UTF8的中文字符是3个长度；
	 * 在mb_strlen计算时，选定内码为UTF8，则会将一个中文字符当作长度1来计算；
	 * 利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少（一个中文字符的占位是2，英文字符是1）：
	 * (strlen($str) + mb_strlen($str, 'UTF8')) / 2
	 */
	return (strlen($string) + mb_strlen($string,'UTF-8')) / 4; 
	
	/*
	 * 原统计方法：
	 * 扫描字段，当发现ASCII时，减掉0.5（因为非ASCII算1个；ASCII算0.5个）
	 */	
	/*
	$weibo_strlen = mb_strlen($string, 'UTF-8');
	$strlen = strlen($string);
	for($i = 0; $i < $strlen; $i++){
		if(ord($string{$i}) <= 127){
			$weibo_strlen -= 0.5;
		}
	}
	return $weibo_strlen;
	*/
}

$arr = array(
	'你好我是好啊',    //6
	'ahccc',    //2.5
	'你好ahccc',    //4.5
	0x01,    //0.5
	's＠@你好',    //4
	'中文ab',    //3
	'b',    //0.5
);

foreach($arr as $str){
	echo strlen_weibo($str). "\r\n";
}